package com.juzi.type;

public class TypeDemo3 {
    public static void main(String[] args) {
        //目标：理解强制类型转换，并使用
        System.out.println(
                "目标：理解强制类型转换，并使用\n" +
                        "==============================\n" +
                        "场景\n" +
                        "int a =  功能1();        int a = 20;       \n" +
                        "功能2(byte b);           byte b = a;//报错    \n" +
                        "-----------------------\n" +
                        "问题\n" +
                        "类型范围大的数据或者变量，不能直接赋值给类型范围小的变量，会报错。\n" +
                        "-----------------------\n" +
                        "强制类型转换\n" +
                        "可以强行将类型范围大的变量、数据赋值给类型范围小的变量。\n" +
                        "-----------------------\n" +
                        "数据类型 变量2 = (数据类型)变量1、数据\n" +
                        "int a = 20;\n" +
                        "byte b = (byte)a; \n" +
                        "-----------------------\n" +
                        "强制类型转换底层原理\n" +
                        "int a = 20;                      a 00000000 00000000 00000000 00010100  (32位）\n" +
                        "byte b =  (byte)a;               b 00010100  （8位）\n" +
                        "System.out.println(b); // 20\n" +
                        "\n" +
                        "int i = 1500;                    i 00000000 00000000 00000101 11011100  (32位）\n" +
                        "byte j =  (byte)i;               j 11011100  （8位）\n" +
                        "System.out.println(j); // -36\n" +
                        "-----------------------\n" +
                        "注意事项\n" +
                        "强制类型转换可能造成数据(丢失)溢出；\n" +
                        "浮点型强转成整型，直接丢掉小数部分，保留整数部分返回。\n"
        );
        int a = 20;
//        byte b = a;//报错范围大的数据或者变量，不能直接赋值给范围小的变量
        byte b = (byte) a;//强行将类型范围大的变量数据赋值给类型小的变量，变量前需要带上小括号，将转型后的数据类型填入
        System.out.println(a);
        System.out.println(b);

        int i = 1500;
        byte j = (byte) i;
        System.out.println(j);
        System.out.println(i);

        double score = 99.5;
        int it = (int) score;
        System.out.println(it);//浮点型强转成整形，直接丢掉小数部分，保留整数部分返回

        //强制类型转换可能会导致数据（丢失）溢出
    }
}
